package com.yidu.InventoryManagement.controller;

import com.yidu.CashManagement.entity.FundsAllot;
import com.yidu.CashManagement.util.CreateId;
import com.yidu.InventoryManagement.Util.SysUtil;
import com.yidu.InventoryManagement.entity.*;
import com.yidu.InventoryManagement.service.ShouYiZhiFuService;
import com.yidu.InventoryManagement.service.securityAccrualStockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.rmi.CORBA.Util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 梁俊
 * @date 2022/12/12
 * &@version 1.0
 */
@RestController
public class ShouYiZhiFuController {
    //收益支付Service
    @Autowired
    private ShouYiZhiFuService shouYiZhiFuService;

    @Autowired
    private com.yidu.InventoryManagement.service.securityAccrualStockService securityAccrualStockService;

    /**
     * 现金利息收入
     * @param page 当前页
     * @param limit 每页显示数
     * @param date 时间
     * @return
     */
    @RequestMapping("/selectShouYiZhiFu")
    public Map selectShouYiZhiFu(int page, int limit, String date){
       //判断时间是否为空
        if (date==null){
            date="";
        }
        //调用根据2个时间当前页每页显示数查询收益支付的方法
        List<XianJinLiXi> cashAccruedssd = shouYiZhiFuService.selectShouYiZhiFu(date,'%'+date+'%',page,limit);
        //map集合
        Map map=new HashMap();
        //循环取数据
        for (XianJinLiXi xianJinLiXi : cashAccruedssd) {
            //判断传过来的时间不为“ ”
            if (date!=""){
               //公共上来的时间减一的变量
                String dateztian=null;
                //创建SimpleDateFormat
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                //创建Calendar
                Calendar c = Calendar.getInstance();
                try {
                    //创建的Calendar对象set赋值
                    c.setTime(sdf.parse(date));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                //创建的Calendar对象.add重新计算时间
                c.add(Calendar.DATE, -1);
                //把最新的时间减一时间放到dateztian
                dateztian = sdf.format(c.getTime());
                //调用取收益支付昨日日期金额得到金额把最新的日期放
                Integer integer = shouYiZhiFuService.selectShouYiZfuMoney(dateztian);

                //调用根据昨日期查询现金利息 的数据库行数
                int s = shouYiZhiFuService.selectXianJinLiXii(dateztian);
                //判断取到的行数不等于0
                if (s!=0){
                    //xianJinLiXi,set金额赋值  昨日的金额
                    xianJinLiXi.setMoney(integer);
                }
            }
               //现金的业务类型等于1或者2
            if (xianJinLiXi.getBusinessType()==1 || xianJinLiXi.getBusinessType()==2){
                //map添加data放现金利息收入
                map.put("data",cashAccruedssd);
            }
        }
        //等于根据时间查行数的方法
        int count = shouYiZhiFuService.selectShouYiZhuFuCount('%'+date+'%');
        map.put("code",0);
        map.put("msg","");
        map.put("count",count);

        return map;
    }


    /**
     * 债券利息收入
     * @param page
     * @param limit
     * @param date
     * @return
     */
    @RequestMapping("/selectZhaiQuan")
    public Map selectZhaiQuan(int page, int limit, String date){
        //判断时间是否为空
        if (date==null){
            date="";
        }
        //调用根据2个时间当前页每页显示数查询债券的方法
        List<ZaiQuanLiXi> cashAccrueds = shouYiZhiFuService.selectZhaiQuan(date,'%' + date + '%', page, limit);
       //map集合
        Map map=new HashMap();
        //for循环取数据
        for (ZaiQuanLiXi cashAccrued : cashAccrueds) {
            //if判断业务类型SecurityType等于1,2,3
            if (cashAccrued.getSecurityType()==1 || cashAccrued.getSecurityType()==2 || cashAccrued.getSecurityType()==3){
              //map添加data
                map.put("data",cashAccrueds);
            }

            //判断时间不等于null
            if (date!=null){
               //公共上来的最新日期变量
                String dateztian=null;
                //创建SimpleDateFormat
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                //创建Calendar
                Calendar c = Calendar.getInstance();
                try {
                    //创建的Calendar对象set时间赋值
                    c.setTime(sdf.parse(date));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                //创建的Calendar对象add添加日期-1
                c.add(Calendar.DATE, -1);
                //创建SimpleDateFormat对象.format 时间
                dateztian = sdf.format(c.getTime());
                //cashAccrued取业务类型
                int securityType = cashAccrued.getSecurityType();
                //业务类型等于1 ，2,3
                if (securityType==1){
                    securityType=1;
                }else if(securityType==2){
                    securityType=2;
                }else if(securityType==3){
                    securityType=1;
                }
                //调用根据昨日日期和业务类型得到昨日日期金额 查询债券金额方法
                Integer integer1 = shouYiZhiFuService.selectZhaiQuanMoney(dateztian,securityType);
              //调用根据最新日期查询债券利息shour的行数的方法
                int s = shouYiZhiFuService.selectZhaiQuanLixiShour(dateztian);
                //判断得到的行数不等于0
                if (s!=0){
                   //cashAccrued给金额赋值 昨日金额
                    cashAccrued.setMoney(integer1);
                }
            }

        }
        //调用根据日期查债券行数的方法
        int count = shouYiZhiFuService.selectZhaiQuanCount('%' + date + '%');
        map.put("code",0);
        map.put("msg","");
        map.put("count",count);


        return map;
    }


    /**
     * 支付2费
     * @param page 当前页
     * @param limit 每页显示数
     * @param date 日期
     * @return
     */
    @RequestMapping("/selectZhiFu1")
    public Map selectZhiFu(int page, int limit, String date){
       //判断时间是否为null
        if (date==null){
            date="";
        }

        //调用根据2个时间当前页每页显示数查询收益支付的方法
        List<XianJinLiXi> cashAccruedssd = shouYiZhiFuService.selectShouYiZhiFu(date,'%'+date+'%',page,limit);
        //map集合
        Map map=new HashMap();
        //for循环取值
        for (XianJinLiXi xianJinLiXi : cashAccruedssd) {
            //判断时间不等于空
            if (date!=""){
                //公共上来的最新日期变量
                String dateztian=null;
                //创建SimpleDateFormat
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                //创建Calendar
                Calendar c = Calendar.getInstance();
                try {
                    //创建的Calendar对象。set给时间赋值
                    c.setTime(sdf.parse(date));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                //创建的Calendar对象。add 日期减一
                c.add(Calendar.DATE, -1);
                //最新日期变量等于创建SimpleDateFormat的对象.format
                dateztian = sdf.format(c.getTime());
                //调用根据昨日日期查询收益支付金额的方法得到昨日金额
                Integer integer = shouYiZhiFuService.selectShouYiZfuMoney(dateztian);
               //调用根据昨日日期查询现金利息的行数的方法
                int s = shouYiZhiFuService.selectXianJinLiXii(dateztian);
                //判断行数不等于0
                if (s!=0){
                   //把得到的昨日金额set到金额中
                    xianJinLiXi.setMoney(integer);
                }
                //判断业务类型等于1 或者 2
                if (xianJinLiXi.getBusinessType()==1 || xianJinLiXi.getBusinessType()==2){
                    //map添加
                    map.put("data",cashAccruedssd);
                }

            }
        }
        //调用根据时间查询收益支付的行数的方法
        int count = shouYiZhiFuService.selectShouYiZhuFuCount('%'+date+'%');
        map.put("code",0);
        map.put("msg","");
        map.put("count",count);
        return map;
    }


    //2费支付点击统计添加到现金应收应付表,资金调拨表
    @RequestMapping("/insertXianJinLiXi")
    public int insertXianJinLiXi(String TwoFees){
        //公共上来的添加语句变量
        int i=0;
        //公共上来的金额变量
        int money=0;
        //日期减一的日期变量
        String date=null;
        //原本的日期变量
        String date1=null;
        //公共上来的业务类型变量
        int businessType1=0;
        //页面上传过来的TwoFees现金应收应付实体类.class
        List<CashAccrued> payTwoFeesList= SysUtil.jsonToArrayList(TwoFees, CashAccrued.class);
        //for循环取值
        for (CashAccrued zfulFeng : payTwoFeesList) {
            //调用查询最大现金id的方法.substring213得到数据库最大的id
            String substring = shouYiZhiFuService.selectDaXianJin().substring(2, 13);
            //调用id自动增长类的方法把最大id放进去得到加1后的id
            String id = "SA"+new com.yidu.InventoryManagement.Util.IdUtil().createID(substring);
          //for循环取的金额
            money = zfulFeng.getMoney();
            //for循环取到的流入流出
            int fundFlow = zfulFeng.getFundFlow();
            //流入流出==1 2
            if (fundFlow==1){
                fundFlow=2;
            }else if(fundFlow==2){
                fundFlow=1;
            }
            //减一的日期
            date = zfulFeng.getDate();
            //得到不变的日期
            date1 = zfulFeng.getDate();
            //for循环取的业务类型
            int businessType = zfulFeng.getBusinessType();
            //for循环取的金额
            int money1 = zfulFeng.getMoney();
            //业务类型==1
            if (zfulFeng.getBusinessType()==1){
                //等于6
                zfulFeng.setBusinessType(6);
                //业务类型==2
            }else if (zfulFeng.getBusinessType()==2){
                //等于7
                zfulFeng.setBusinessType(7);
            }
            //修改之后的业务类型，在for循环取
             businessType1 = zfulFeng.getBusinessType();
            //调用根据时间，业务类型，金额删除现金应收应付的重复数据
            int i1 = shouYiZhiFuService.deleteCashAccruedd(date, businessType1, money1);
           //CashAccrued实体类放加1后的id fundld
            CashAccrued cashStock1=new CashAccrued(id,"159935",zfulFeng.getAccountName(),zfulFeng.getDate(),"1",businessType1,fundFlow,zfulFeng.getMoney(),"");
            //调用新增现金应收应付的方法
            i = shouYiZhiFuService.insertXianJinLiXi(cashStock1);
        }

        //公共上来的新增方法变量
        int i1=0;
        //页面上传过来的TwoFees资金调拨实体类.class
        List<FundsAllot> fundsAllots= SysUtil.jsonToArrayList(TwoFees, FundsAllot.class);
        //for循环取值
        for (FundsAllot fundsAllot : fundsAllots) {
            //调用查询资金调拨的最大id210
            String substring1 = shouYiZhiFuService.selectZijinDiaoBo().substring(2, 10);
            //FA调用id自动增长类的方法得到加1后的id
            String id1 = "FA"+new com.yidu.InventoryManagement.Util.IdUtil().createID(substring1);
          //创建SimpleDateFormat
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            //创建Calendar
            Calendar c = Calendar.getInstance();
            try {
                //Calendar对象set给时间赋值
                c.setTime(sdf.parse(date));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            //Calendar对象set给时间赋值加1
            c.add(Calendar.DATE, 1);
            //公共的data=SimpleDateFormat对象。foemat
            date = sdf.format(c.getTime());
           //调用根据时间1，业务1，金额删除资金调拨重复数据
            int i2 = shouYiZhiFuService.deleteZiJingDiaoB(date1, businessType1, money);
            //FundsAllot实体类自动增长后的id,1
            FundsAllot fundsAllot1=new FundsAllot(id1,"1",businessType1,fundsAllot.getAllotDirection(),money,"T10088","159935",date1,date,fundsAllot.getRemark(),fundsAllot.getAccountName());
           //调用添加语句fund
            i1 = shouYiZhiFuService.insertFundsAllot(fundsAllot1);
        }


        if(i1>0){
            System.out.println("添加成功"+i1);
        }else{
            System.out.println("添加失败"+i1);
        }
        return i1;
    }




    //现金利息收入点击统计添加到现金应收应付表,资金调拨表
    @RequestMapping("/insertXianJinLiXi1")
    public int insertXianJinLiXi1(String cash){
        //公共上来的添加语句变量
        int i=0;
        //公共上来的金额变量
        int money=0;
        //日期减一的日期变量
        String date=null;
        //原本的日期变量
        String date1=null;
        //公共上来的业务类型变量
        int businessType1=0;
        //页面上传过来的TwoFees现金应收应付实体类.class
        List<CashAccrued> payTwoFeesList= SysUtil.jsonToArrayList(cash, CashAccrued.class);
        //for循环取值
        for (CashAccrued zfulFeng : payTwoFeesList) {
            //调用查询最大现金id的方法.substring213得到数据库最大的id
            String substring = shouYiZhiFuService.selectDaXianJin().substring(2, 13);
            //调用id自动增长类的方法把最大id放进去得到加1后的id
            String id = "SA"+new com.yidu.InventoryManagement.Util.IdUtil().createID(substring);
            //for循环取的金额
            money = zfulFeng.getMoney();
            //for循环取到的流入流出
            int fundFlow = zfulFeng.getFundFlow();
            //流入流出==1 2
            if (fundFlow==1){
                fundFlow=2;
            }else if(fundFlow==2){
                fundFlow=1;
            }
            //减一的日期
            date = zfulFeng.getDate();
            //得到不变的日期
            date1 = zfulFeng.getDate();
            //for循环取的业务类型
            int businessType = zfulFeng.getBusinessType();
            //for循环取的金额
            int money1 = zfulFeng.getMoney();
            //业务类型==1
            if (zfulFeng.getBusinessType()==1){
                //等于6
                zfulFeng.setBusinessType(6);
                //业务类型==2
            }else if (zfulFeng.getBusinessType()==2){
                //等于7
                zfulFeng.setBusinessType(7);
            }
            //修改之后的业务类型，在for循环取
            businessType1 = zfulFeng.getBusinessType();
            //调用根据时间，业务类型，金额删除现金应收应付的重复数据
            int i1 = shouYiZhiFuService.deleteCashAccruedd(date, businessType1, money1);
            //CashAccrued实体类放加1后的id fundld
            CashAccrued cashStock1=new CashAccrued(id,"159935",zfulFeng.getAccountName(),zfulFeng.getDate(),"1",businessType1,fundFlow,zfulFeng.getMoney(),"");
            //调用新增现金应收应付的方法
            i = shouYiZhiFuService.insertXianJinLiXi(cashStock1);
        }

        //公共上来的新增方法变量
        int i1=0;
        //页面上传过来的TwoFees资金调拨实体类.class
        List<FundsAllot> fundsAllots= SysUtil.jsonToArrayList(cash, FundsAllot.class);
        //for循环取值
        for (FundsAllot fundsAllot : fundsAllots) {
            //调用查询资金调拨的最大id210
            String substring1 = shouYiZhiFuService.selectZijinDiaoBo().substring(2, 10);
            //FA调用id自动增长类的方法得到加1后的id
            String id1 = "FA"+new com.yidu.InventoryManagement.Util.IdUtil().createID(substring1);
            //创建SimpleDateFormat
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            //创建Calendar
            Calendar c = Calendar.getInstance();
            try {
                //Calendar对象set给时间赋值
                c.setTime(sdf.parse(date));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            //Calendar对象set给时间赋值加1
            c.add(Calendar.DATE, 1);
            //公共的data=SimpleDateFormat对象。foemat
            date = sdf.format(c.getTime());
            //调用根据时间1，业务1，金额删除资金调拨重复数据
            int i2 = shouYiZhiFuService.deleteZiJingDiaoB(date1, businessType1, money);
            //FundsAllot实体类自动增长后的id,1
            FundsAllot fundsAllot1=new FundsAllot(id1,"1",businessType1,fundsAllot.getAllotDirection(),money,"T10088","159935",date1,date,fundsAllot.getRemark(),fundsAllot.getAccountName());
            //调用添加语句fund
            i1 = shouYiZhiFuService.insertFundsAllot(fundsAllot1);
        }


        if(i1>0){
            System.out.println("添加成功"+i1);
        }else{
            System.out.println("添加失败"+i1);
        }
        return i1;
    }


    //债券利息收入点击统计添加到证券应收应付表,资金调拨表
    @RequestMapping("/insertXianJinLiXi2")
    public int insertXianJinLiXi2(String Securities,String accountIds){
      //公共上来的添加方法变量
        int i=0;
        //根据Securities和SecurityAccrued查询数据
        List<SecurityAccrued> securityAccrued = SysUtil.jsonToArrayList(Securities, SecurityAccrued.class);
       //for循环取值
        for (SecurityAccrued accrued : securityAccrued) {
            //调用获取债券利息最大id的方法2,20
            String substring = shouYiZhiFuService.selectDaZhaiQuanId().substring(2, 20);
            //循环取的流入流出
            int fundFlow = accrued.getFundFlow();
            //流入流出==1
            if (fundFlow==1){
                //等于-1
                fundFlow=-1;
            }else if(fundFlow==-1){
                fundFlow=1;
            }
            //调用自动增长类的方法现金最大的id
            String id = "CA"+new com.yidu.InventoryManagement.Util.IdUtil().createID(substring);
           //调用根据循环时间，业务类型，金额删除的方法
            int i1 = shouYiZhiFuService.deletesecurityAccruedd(accrued.getDate(), accrued.getSecurityType(), accrued.getMoney());
           //SecurityAccrued实体类最大id，159935,1,60028
            SecurityAccrued securityAccrued1=new SecurityAccrued(id,accrued.getDate(),"159935","1","600028",accrued.getSecurityType(),fundFlow,accrued.getMoney(),"");
           //调用资金调拨新增方法Se
            i = shouYiZhiFuService.insertSecurityAccrued(securityAccrued1);
        }

       //公共上来的添加语句变量
        int i1=0;
        //页面传过来的Securities，和债券实体类
        List<ZaiQuanLiXi> zaiQuanLiXi= SysUtil.jsonToArrayList(Securities, ZaiQuanLiXi.class);
        //for循环取值
        for (ZaiQuanLiXi quanLiXi : zaiQuanLiXi) {
            //调用资金调拨获取最大id的方法2,10
            String substring1 = shouYiZhiFuService.selectZijinDiaoBo().substring(2, 10);
            //FA调用id自动增长类的方法把取到的资金调拨id放进来
            String id1 = "FA"+new com.yidu.InventoryManagement.Util.IdUtil().createID(substring1);
           //循环取的时间
            String date = quanLiXi.getDate();
            //创建SimpleDateFormat
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            //创建Calendar
            Calendar c = Calendar.getInstance();
            try {
                //创建Calendar的对象set时间赋值
                c.setTime(sdf.parse(date));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            //创建Calendar的对象add时间加1
            c.add(Calendar.DATE, 1);
            //date等于创建SimpleDateFormat对象c.get时间
            date = sdf.format(c.getTime());
            //循环取业务类型
            int securityType = quanLiXi.getSecurityType();
            //业务类型==1
            if (securityType==1){
                //等于8
                securityType=8;
                //等于2
            }else if (securityType==2){
                //等于9
                securityType=9;
                //等于3
            }else if (securityType==3){
                //等于4
                securityType=4;
            }

            //调用根据循环时间，判断业务类型，循环金额
            int i2 = shouYiZhiFuService.deleteZiJingDiaoB(quanLiXi.getDate(), securityType, quanLiXi.getMoney());
           //FundsAllot实体类放加一后的id，1，判断后的业务类型
            FundsAllot fundsAllot1=new FundsAllot(id1,"1",securityType,quanLiXi.getBusinessState(),quanLiXi.getMoney(),"T10089","159935",quanLiXi.getDate(),date,"",quanLiXi.getSecurityName());
           //调用添加资金调拨的方法
            i1 = shouYiZhiFuService.insertFundsAllot(fundsAllot1);
        }

        if(i>0){
            System.out.println("添加成功"+i);
        }else{
            System.out.println("添加失败"+i);
        }
        return i;
    }



}

